package com.yqs.mapper;

import com.yqs.entity.Emp;

import java.util.List;
import java.util.Map;

/**
 * 员工数据访问接口，封装了对员工数据的操作。
 *
 * @author Ye QS
 * @version 0.1
 * @className EmpDao
 * @description 提供了一系列方法来对员工信息进行增删改查操作。
 * @date 2024/7/29 11:40
 * @since jdk11
 */

public interface EmpMapper {
    /**
     * 添加一个新的员工记录到数据库。
     *
     * @param emp 员工对象，包含要添加的员工的所有信息。
     * @return 插入操作影响的行数（在大多数情况下应该是1）。
     */
    int addEmp(Emp emp);

    /**
     * 删除多个员工
     *
     * @param arrays 员工ID数组
     * @return 被删除的员工数量
     */
    int delEmps(int[] arrays);


    /**
     * 根据员工的 ID 删除员工记录。
     *
     * @param empId 要删除的员工的 ID。
     * @return 如果删除成功，返回 1；如果员工不存在或者删除失败，返回 0。
     */
    int delByEmpId(int empId);
    /**
     * 更新员工的信息。
     *
     * <p>此方法接收一个包含员工信息的Emp对象，并在数据库中更新相应的记录。</p>
     *
     * @param emp 要更新的员工对象，必须包含有效的员工ID
     * @return 更新操作影响的行数，如果更新成功且至少影响了一行，则返回1；如果员工ID不存在，则返回0
     * @throws IllegalArgumentException 如果传入的Emp对象为null或员工ID无效
     */
    int updateEmp(Emp emp);
    /**
     * 根据薪资或部门获取员工列表
     *
     * @param emp 包含薪资和/或部门信息的员工对象
     * @return 符合条件的员工列表
     */
    /**
     * 根据员工的薪资或部门检索员工列表。
     *
     * @param emp 包含薪资和部门信息的员工对象，用于匹配条件。
     * @return 匹配薪资或部门条件的员工列表。
     */

    List<Emp> getEmpBySalOrDept(Emp emp);

    /**
     * 获取所有员工的列表。
     *
     * @return 包含所有员工的列表。
     */
    /**
     * 获取所有员工的列表。
     *
     * @return 包含所有员工信息的列表。
     */
    List<Emp> getAllEmps();

    /**
     * 根据分页参数获取员工列表。
     *
     * @param params 分页参数，包括但不限于：
     *               - "pageNum" 分页的页码，从1开始
     *               - "pageSize" 每页显示的员工数量
     * @return 分页后的员工列表
     */
    List<Emp> getEmpsByPage(Map<String, Object> params);

    /**
     * 根据传入的参数进行模糊搜索并分页获取员工列表。
     *
     * @param params 一个Map，包含搜索关键词（empName）和分页参数（pageNum和pageSize）。
     *               - empName：用于模糊搜索员工姓名的关键词。
     *               - pageNum：当前页码，从1开始。
     *               - pageSize：每页显示的员工数量。
     * @return 一个包含员工对象的列表，这些对象对应当前页的搜索结果。
     */
    List<Emp> fuzzyGetEmpsByPage(Map<String, Object> params);

    /**
     * 获取员工总数。
     *
     * @return 员工的总数量
     */
    int getEmpCount();

    /**
     * 根据传入的员工ID获取对应的员工对象。
     *
     * <p>此方法通过员工ID作为唯一标识，查询并返回员工的详细信息。</p>
     *
     * @param eid 员工的ID，必须是非负整数
     * @return 返回一个Emp对象，如果找到对应的员工信息；如果没有找到，返回null
     */
    Emp getEmpById(int eid);

}